package com.hotel.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 预订实体
 * 
 * @author Hotel Management Team
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("reservation")
public class Reservation implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 预订ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 预订单号
     */
    @TableField("reservation_no")
    private String reservationNo;

    /**
     * 会员ID
     */
    @TableField("member_id")
    private Long memberId;

    /**
     * 客人姓名
     */
    @TableField("guest_name")
    private String guestName;

    /**
     * 客人电话
     */
    @TableField("guest_phone")
    private String guestPhone;

    /**
     * 房型ID
     */
    @TableField("room_type_id")
    private Long roomTypeId;

    /**
     * 房间数量
     */
    @TableField("room_count")
    private Integer roomCount;

    /**
     * 入住日期
     */
    @TableField("checkin_date")
    private LocalDate checkinDate;

    /**
     * 退房日期
     */
    @TableField("checkout_date")
    private LocalDate checkoutDate;

    /**
     * 住宿天数
     */
    @TableField("nights")
    private Integer nights;

    /**
     * 预订总金额
     */
    @TableField("total_amount")
    private BigDecimal totalAmount;

    /**
     * 押金
     */
    @TableField("deposit")
    private BigDecimal deposit;

    /**
     * 预订状态：pending-待确认，confirmed-已确认，checkedin-已入住，cancelled-已取消
     */
    @TableField("status")
    private String status;

    /**
     * 备注
     */
    @TableField("remarks")
    private String remarks;

    /**
     * 创建时间
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    /**
     * 会员姓名（非数据库字段）
     */
    @TableField(exist = false)
    private String memberName;

    /**
     * 房型名称（非数据库字段）
     */
    @TableField(exist = false)
    private String roomTypeName;

    /**
     * 房型价格（非数据库字段）
     */
    @TableField(exist = false)
    private BigDecimal roomPrice;

    /**
     * 状态名称（非数据库字段）
     */
    @TableField(exist = false)
    private String statusName;

}